/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beans.util;

import beans.enitites.ExaminationBean;
import db.entities.Examination;
import db.entities.Patient;
import db.entities.Referenze;
import hirondelle.date4j.DateTime;
import java.util.*;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import mail.Sender;


/**
 *
 * @author marcy
 */
public class TimeLimitNotifyBean {

    private List<Examination> listaRichiami;
    private int nSec;
    private TreeMap<String, String> listaCapovillaggi = new TreeMap<String, String>();
    private TreeMap<String, String> testoMail = new TreeMap<String, String>();
    

    public int getnSec() {
        return nSec;
    }

    public void setnSec(int nSec) {
        this.nSec = nSec;
    }

    public String initialize() {
        DateTime timeLimit = DateTime.now(TimeZone.getDefault());
        timeLimit = timeLimit.plus(0, 0, nSec, 0, 0, 0, DateTime.DayOverflow.Abort);
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("PortaleVisitePU");
        EntityManager em = emf.createEntityManager();
        //Ottengo la lista delle Examination all'interno dell'arco di tempo ( la + vicina per paziente )
        this.listaRichiami = em.createNamedQuery("Examination.insideTimeLimit", Examination.class)
                .setParameter("timeLimit", new Date(timeLimit.getMilliseconds(TimeZone.getDefault()))).getResultList();
            
        Iterator i = listaRichiami.iterator();
        while(i.hasNext()){
            Examination esamin = (Examination) i.next();
            Referenze refPaziente = (Referenze) em.createNamedQuery("Referenze.findByIdPaz", Referenze.class).setParameter("idPaz", esamin.getId_pat()).getSingleResult();
            Patient paziente = (Patient) em.createNamedQuery("Patient.findById", Patient.class).setParameter("id", refPaziente.getIdPaz()).getSingleResult();
            Referenze capoVillaggio = (Referenze) em.createNamedQuery("Referenze.findByIdPaz", Referenze.class).setParameter("idPaz", refPaziente.getIdCapovillaggio()).getSingleResult();
            //Creo il testo per l'allegato mail per il capovillaggio
            if(listaCapovillaggi.containsKey(capoVillaggio.getEmail())){
                String tmpCapo = listaCapovillaggi.remove(capoVillaggio.getEmail());
                tmpCapo += "Il signor "+paziente.getNome()+" "+paziente.getCognome()+" "
                        + "deve essere visitato il "+esamin.getScadenza().toLocaleString()+"\n";
                listaCapovillaggi.put(capoVillaggio.getEmail(), tmpCapo);            
            }
            else{
                String tmpCapo = "Il signor "+paziente.getNome()+" "+paziente.getCognome()+" "
                        + "deve essere visitato il "+esamin.getScadenza().toLocaleString()+"\n";
                listaCapovillaggi.put(capoVillaggio.getEmail(), tmpCapo);  
            }
            //Creo il testo per la mail al paziente
            String testo = "Buongiorno, lei ha ricevuto questa mail poichè un operatore Usl ha notato che prossimamente avrà una visita in scadenza.\n"
                    + "Più precisamente la visita si terrà il "+esamin.getScadenza().toLocaleString()+" per il seguente motivo: "+esamin.getDescrizione()+". \n"
                    + "Una mail è stata inviata al suo capovillaggio.";
            testoMail.put(refPaziente.getEmail(), testo);       
        }
        
        Sender sender = new Sender();//(listaCapovillaggi, testoMail);
        return sender.getResult();
    }
}
